# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/13 15:00 
@Author  : ZhangShenao 
@File    : objgraph_demo.py 
@Desc    : 使用objgraph包,可以清晰地查看对象的引用关系图
"""
import objgraph


def gen_obj_ref_graph() -> None:
    """生成对象的引用关系图"""

    a = [1, 2, 3]
    b = [4, 5, 6]
    a.append(b)
    b.append(a)

    # 通过引用关系图,可以非常直观地查看到循环引用的情况
    objgraph.show_refs([a])


def gen_obj_backrefs() -> None:
    """
    生成对象的引用调用关系图
    相较于show_refs()函数,show_backrefs()的API更加丰富
    如层数限制(max_depth)、宽度限制(too_many)、输出格式控制(filename output)、节点过滤(filter, extra_ignore)等
    """

    a = [1, 2, 3]
    b = [4, 5, 6]
    a.append(b)
    b.append(a)
    objgraph.show_backrefs([a])


if __name__ == '__main__':
    # gen_obj_ref_graph()

    gen_obj_ref_graph()
